package entidades;

import util.MySQL;
import java.util.List;
import java.util.HashMap;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.google.gson.Gson;
import java.util.LinkedList;

/**
 *
 * @author JFM
 */
public class Dimensiones extends Entidad
	{
	private float altura;
	private float ancho;
	private float largo;

	static final String NOMBRE_TABLA = "dimensiones";



	// --- Constructores --- //

	public Dimensiones()
		{
		id = 0;
		altura = 0;
		ancho = 0;
		largo = 0;
		}

	public Dimensiones(int id) throws SQLException
		{ super(id); }

	public Dimensiones(String id) throws SQLException
		{ super(id); }

	public Dimensiones(ResultSet result) throws SQLException
		{ super(result); }

	public Dimensiones(ResultSet result, String prefix) throws SQLException
		{ super(result, prefix); }



	// --- Metodos get()/set() --- //

	public float getAltura()
		{ return altura; }
	public void setAltura(float altura)
		{ this.altura = altura; }
	public void setAltura(String altura)
		{ try{this.altura = Float.parseFloat(altura);}catch(Exception e) {this.altura = 0.0f;} }

	public float getAncho()
		{ return ancho; }
	public void setAncho(float ancho)
		{ this.ancho = ancho; }
	public void setAncho(String ancho)
		{ try{this.ancho = Float.parseFloat(ancho);}catch(Exception e) {this.ancho = 0.0f;} }

	public float getLargo()
		{ return largo; }
	public void setLargo(float largo)
		{ this.largo = largo; }
	public void setLargo(String largo)
		{ try{this.largo = Float.parseFloat(largo);}catch(Exception e) {this.largo = 0.0f;} }

	@Override
	public String getDescriptor()
		{
		String res = "";

		int aux = (int)ancho;
		if((ancho - aux) < 0.1f ) res += aux + "x"; else res += ancho + "x";

		aux = (int) largo;
		if((largo - aux) < 0.1f ) res += aux + "x"; else res += largo + "x";

		aux = (int) altura;
		if((altura - aux) < 0.1f ) res += aux; else res += altura;

		return res;
		}

	@Override
	public String toJson()
		{
		HashMap map = new HashMap();
		map.put("id", id);
		map.put("ancho", ancho);
		map.put("largo", largo);
		map.put("alto", altura);
		return new Gson().toJson(map);
		}



	// --- Metodos MySQL --- //

	@Override
	public String getNombreTabla()
		{ return NOMBRE_TABLA; }

	@Override
	public void leer(ResultSet result, String prefijo) throws SQLException
		{
		this.setId(result.getInt(prefijo + "id"));
		this.setAncho(result.getFloat(prefijo + "ancho"));
		this.setAltura(result.getFloat(prefijo + "altura"));
		this.setLargo(result.getFloat(prefijo + "largo"));
		}

	@Override
	public void guardar() throws SQLException
		{
		ResultSet result = MySQL.executeQuery("Call Dimensiones_Save(" +
				MySQL.formatId(id) + "," +
				MySQL.format(ancho) + "," +
				MySQL.format(largo) + "," +
				MySQL.format(altura) + ")");

		if(result.next())
			{
			if( result.getMetaData().getColumnCount() == 1)
				{ throw new SQLException(result.getString("mensaje")); }
			else
				{ leer(result); }
			}

		result.getStatement().close();
		}

	@Override
	public void borrar() throws SQLException
		{ borrar(id+""); }

	public static void borrar(String id) throws SQLException
		{
		String msj = null;
		ResultSet result = MySQL.executeQuery("Call Dimensiones_Delete("+id+")");
		if(result.next())
			{ msj = result.getString("mensaje"); }
		result.getStatement().close();
		if(msj != null && msj.compareToIgnoreCase("ok") != 0)
			{ throw new SQLException(msj); }
		}

	@Override
	public void cargar() throws SQLException
		{
		String query = "SELECT * FROM " + NOMBRE_TABLA + " WHERE ";
		if(id > 0 ) query += " id = " + this.getId(); else query += " ancho = " + ancho + " AND largo = " + largo + " AND altura = " + altura;
		ResultSet result = MySQL.executeQuery(query);
		if(result.next()) {this.leer(result);}
		result.getStatement().close();
		}

	public static List<Dimensiones> listar() throws SQLException
		{ return (List) Entidad.listar(Dimensiones.class, NOMBRE_TABLA, "ancho ASC, largo ASC, altura"); }

        public static Dimensiones getDimensiones(float altura, float ancho, float largo) throws SQLException {
            String where = " ancho = " + ancho + " AND largo = " + largo + " AND altura = " + altura;
            LinkedList lista = (LinkedList) Entidad.buscar(Dimensiones.class, NOMBRE_TABLA, where);
            if (!lista.isEmpty()){
                return (Dimensiones)lista.get(0);
            }else{
                return null;
            }

        }

}
